home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / um / include / shared / line.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.2 KB  |  106 lines

  1. /* 
  2.  * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
  3.  * Licensed under the GPL
  4.  */
  5.  
  6. #ifndef __LINE_H__
  7. #define __LINE_H__
  8.  
  9. #include "linux/list.h"
  10. #include "linux/workqueue.h"
  11. #include "linux/tty.h"
  12. #include "linux/interrupt.h"
  13. #include "linux/spinlock.h"
  14. #include "linux/mutex.h"
  15. #include "chan_user.h"
  16. #include "mconsole_kern.h"
  17.  
  18. /* There's only one modifiable field in this - .mc.list */
  19. struct line_driver {
  20.     const char *name;
  21.     const char *device_name;
  22.     const short major;
  23.     const short minor_start;
  24.     const short type;
  25.     const short subtype;
  26.     const int read_irq;
  27.     const char *read_irq_name;
  28.     const int write_irq;
  29.     const char *write_irq_name;
  30.     struct mc_device mc;
  31. };
  32.  
  33. struct line {
  34.     struct tty_struct *tty;
  35.     spinlock_t count_lock;
  36.     int valid;
  37.  
  38.     char *init_str;
  39.     int init_pri;
  40.     struct list_head chan_list;
  41.  
  42.     /*This lock is actually, mostly, local to*/
  43.     spinlock_t lock;
  44.     int throttled;
  45.     /* Yes, this is a real circular buffer.
  46.      * XXX: And this should become a struct kfifo!
  47.      *
  48.      * buffer points to a buffer allocated on demand, of length
  49.      * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/
  50.     char *buffer;
  51.     char *head;
  52.     char *tail;
  53.  
  54.     int sigio;
  55.     struct delayed_work task;
  56.     const struct line_driver *driver;
  57.     int have_irq;
  58. };
  59.  
  60. #define LINE_INIT(str, d) \
  61.     { .count_lock =    __SPIN_LOCK_UNLOCKED((str).count_lock), \
  62.       .init_str =    str,    \
  63.       .init_pri =    INIT_STATIC, \
  64.       .valid =    1, \
  65.       .lock =    __SPIN_LOCK_UNLOCKED((str).lock), \
  66.       .driver =    d }
  67.  
  68. extern void line_close(struct tty_struct *tty, struct file * filp);
  69. extern int line_open(struct line *lines, struct tty_struct *tty);
  70. extern int line_setup(struct line *lines, unsigned int sizeof_lines,
  71.               char *init, char **error_out);
  72. extern int line_write(struct tty_struct *tty, const unsigned char *buf,
  73.               int len);
  74. extern int line_put_char(struct tty_struct *tty, unsigned char ch);
  75. extern void line_set_termios(struct tty_struct *tty, struct ktermios * old);
  76. extern int line_chars_in_buffer(struct tty_struct *tty);
  77. extern void line_flush_buffer(struct tty_struct *tty);
  78. extern void line_flush_chars(struct tty_struct *tty);
  79. extern int line_write_room(struct tty_struct *tty);
  80. extern int line_ioctl(struct tty_struct *tty, struct file * file,
  81.               unsigned int cmd, unsigned long arg);
  82. extern void line_throttle(struct tty_struct *tty);
  83. extern void line_unthrottle(struct tty_struct *tty);
  84.  
  85. extern char *add_xterm_umid(char *base);
  86. extern int line_setup_irq(int fd, int input, int output, struct line *line,
  87.               void *data);
  88. extern void line_close_chan(struct line *line);
  89. extern struct tty_driver *register_lines(struct line_driver *line_driver,
  90.                      const struct tty_operations *driver,
  91.                      struct line *lines, int nlines);
  92. extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts);
  93. extern void close_lines(struct line *lines, int nlines);
  94.  
  95. extern int line_config(struct line *lines, unsigned int sizeof_lines,
  96.                char *str, const struct chan_opts *opts,
  97.                char **error_out);
  98. extern int line_id(char **str, int *start_out, int *end_out);
  99. extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n,
  100.                char **error_out);
  101. extern int line_get_config(char *dev, struct line *lines,
  102.                unsigned int sizeof_lines, char *str,
  103.                int size, char **error_out);
  104.  
  105. #endif
  106.